#ifndef PROCESSOR_HPP
#define PROCESSOR_HPP

#include "io.hpp"
#include "core.hpp"
#include "memory.hpp"
#include "pages.hpp"
#include <thread>

class Processor
{
private:
    int count;
    CalcCore *cores;
    MemCore *mems;
    TLB *pages;
    MessageBus *bus;
    IOMessage *io;
    Semaphore<MESIMeta> *message;

public:
    Processor() = default;
    Processor(size_t count, IOMessage *io);
    ~Processor() = default;
    void boot();
    void run();
    void stop();
};

#endif